package com.qixiaobao.direct.invoice.service;

import com.qixiaobao.direct.invoice.domain.dto.DirectInvoiceDTO;
import com.qixiaobao.direct.invoice.domain.vo.DirectInvoiceChargeVO;
import com.qixiaobao.direct.invoice.domain.vo.DirectInvoiceVO;
import com.qixiaobao.direct.invoice.domain.vo.DirectWaitInvoiceVO;

import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.List;

/**
 * @Description 直投发票管理（新）  业务层
 * @Author yangxm
 * @Date 2025/7/3 15:32
 */
public interface IDirectInvoiceNewService {


    /**
     * @Description 查询待开票列表
     * @Author yangxm
     * @Date 2025/7/3 15:34
     * @param directInvoiceDTO
     * @return java.util.List<com.qixiaobao.directinvoice.domain.vo.DirectWaitInvoiceVO>
     */
    List<DirectWaitInvoiceVO> selectWaitInvoiceList(DirectInvoiceDTO directInvoiceDTO);

    /**
     * @Description 待开票 - 开票金额合计
     * @Author yangxm
     * @Date 2025/7/3 15:34
     * @param directInvoiceDTO
     * @return java.math.BigDecimal
     */
    BigDecimal selectWaitInvoiceTotal(DirectInvoiceDTO directInvoiceDTO);

    /**
     * @Description 开票中、已开票 - 列表
     * @Author yangxm
     * @Date 2025/7/3 16:05
     * @param directInvoiceDTO
     * @return java.util.List<com.qixiaobao.directinvoice.domain.vo.DirectInvoiceVO>
     */
    List<DirectInvoiceVO> selectInvoiceList(DirectInvoiceDTO directInvoiceDTO);

    /**
     * @Description 开票中、已开票 - 列表 - 开票金额总计
     * @Author yangxm
     * @Date 2025/7/3 16:32
     * @param directInvoiceDTO
     * @return java.math.BigDecimal
     */
    BigDecimal selectInvoiceTotal(DirectInvoiceDTO directInvoiceDTO);

    /**
     * @Description 开票中、已开票 - 导出
     * @Author yangxm
     * @Date 2025/7/3 16:38
     * @param directInvoiceDTO
     * @param response
     */
    void invoiceExport(DirectInvoiceDTO directInvoiceDTO, HttpServletResponse response);

    /**
     * @Description 开票中、已开票 - 详情
     * @Author yangxm
     * @Date 2025/7/3 16:50
     * @param invoiceId
     * @return java.util.List<com.qixiaobao.directinvoice.domain.vo.DirectInvoiceChargeVO>
     */
    List<DirectInvoiceChargeVO> selectInvoiceChargeListByInvoiceId(Long invoiceId);

    /**
     * @Description 开票中 - 修改供应商备注
     * @Author yangxm
     * @Date 2025/7/3 16:50
     * @param directInvoiceDTO
     * @return int
     */
    int updateSupplyRemark(DirectInvoiceDTO directInvoiceDTO);

    /**
     * @Description 开票中 - 上传发票文件
     * @Author yangxm
     * @Date 2025/7/3 16:50
     * @param directInvoiceDTO
     * @return int
     */
    int uploadInvoiceFile(DirectInvoiceDTO directInvoiceDTO);

    /**
     * @Description 发票文件
     * @Author yangxm
     * @Date 2025/7/3 17:28
     * @param directInvoiceDTO
     * @return java.lang.String
     */
    String selectInvoiceFile(DirectInvoiceDTO directInvoiceDTO);
}
